import { IContext, IEntityLocalDataService, IParam } from '@/core';
import { IIBIZOrderDetail } from '../interface/i-ibiz-order-detail';
import keys from '../ibiz-order-detail-keys';


/**
 * IBIZOrderDetailDTODTO辅助类
 * 基于template/src/api/{{appEntities}}/data-service/{{appEntities}}-help.ts.hbs生成  
 *
 * @export
 * @class IBIZOrderDetailDTOHelp
 */
export class IBIZOrderDetailDTOHelp {

    /**
     * 获取实体数据服务
     *
     * @static
     * @param {IParam} context
     * @return {*}  {Promise<IEntityLocalDataService<IIBIZOrderDetail>>}
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async getService(context: IParam): Promise<IEntityLocalDataService<IIBIZOrderDetail>> {
        return App.getDataService('IBIZOrderDetail', context);
    }

    /**
     * 获取是否缓存
     *
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static getEnableCache(){
        return false;
    }

    /**
     * DTO转化成数据对象
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} source dto对象
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async toDataObj(context: IContext, source: IParam) {
        const _data: any = {};
        //  小计
        _data.amount = source.amount;
        //  建立时间
        _data.createdate = source.createdate;
        //  建立人
        _data.createman = source.createman;
        //  测试属性
        _data.ibizorderdetaila = source.ibizorderdetaila;
        //  订单明细标识
        _data.ibizorderdetailid = source.ibizorderdetailid;
        //  订单明细名称
        _data.ibizorderdetailname = source.ibizorderdetailname;
        //  订单标识
        _data.ibizorderid = source.ibizorderid;
        //  订单名称
        _data.ibizordername = source.ibizordername;
        //  统一产品标识
        _data.ibizuniproductid = source.ibizuniproductid;
        //  产品名称
        _data.ibizuniproductname = source.ibizuniproductname;
        //  订单编号
        _data.orderuid = source.orderuid;
        //  数量
        _data.quantity = source.quantity;
        //  单位
        _data.unit = source.unit;
        //  单价X
        _data.unitprice = source.unitprice;
        //  更新时间
        _data.updatedate = source.updatedate;
        //  更新人
        _data.updateman = source.updateman;
        //  处理预置字段（以srf开头）
        if (source && Object.keys(source).length > 0) {
            Object.keys(source).forEach((key:string) =>{
                if(key.startsWith('srf')){
                    _data[key] = source[key];
                }
            })
        }
        return _data;
    }

    /**
     * 转化数据（DTO转化成数据对象）
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} data 数据对象
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async toDataObjArray(context: IContext, data: any[]) {
        const _data: any[] = [];
        if (data && Array.isArray(data) && data.length > 0) {
            for (let i = 0; i < data.length; i++) {
                const tempdata = await this.toDataObj(context, data[i]);
                _data.push(tempdata);
            }
        }
        return _data;
    }

    /**
     * 数据对象转化成DTO
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} source 数据对象
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async toDto(context: IContext, source: IParam) {
        const _data: any = {};
        const excludes: string[] = [];
        //  小计
        if(source.hasOwnProperty('amount')){
            _data.amount = source.amount;
        }
        //  建立时间
        if(source.hasOwnProperty('createdate')){
            _data.createdate = source.createdate;
        }
        //  建立人
        if(source.hasOwnProperty('createman')){
            _data.createman = source.createman;
        }
        //  测试属性
        if(source.hasOwnProperty('ibizorderdetaila')){
            _data.ibizorderdetaila = source.ibizorderdetaila;
        }
        //  订单明细标识
        if(source.hasOwnProperty('ibizorderdetailid')){
            _data.ibizorderdetailid = source.ibizorderdetailid;
        }
        //  订单明细名称
        if(source.hasOwnProperty('ibizorderdetailname')){
            _data.ibizorderdetailname = source.ibizorderdetailname;
        }
        //  订单标识
        if(source.hasOwnProperty('ibizorderid')){
            _data.ibizorderid = source.ibizorderid;
        }
        //  订单名称
        if(source.hasOwnProperty('ibizordername')){
            _data.ibizordername = source.ibizordername;
        }
        //  统一产品标识
        if(source.hasOwnProperty('ibizuniproductid')){
            _data.ibizuniproductid = source.ibizuniproductid;
        }
        //  产品名称
        if(source.hasOwnProperty('ibizuniproductname')){
            _data.ibizuniproductname = source.ibizuniproductname;
        }
        //  订单编号
        if(source.hasOwnProperty('orderuid')){
            _data.orderuid = source.orderuid;
        }
        //  数量
        if(source.hasOwnProperty('quantity')){
            _data.quantity = source.quantity;
        }
        //  单位
        if(source.hasOwnProperty('unit')){
            _data.unit = source.unit;
        }
        //  单价X
        if(source.hasOwnProperty('unitprice')){
            _data.unitprice = source.unitprice;
        }
        //  更新时间
        if(source.hasOwnProperty('updatedate')){
            _data.updatedate = source.updatedate;
        }
        //  更新人
        if(source.hasOwnProperty('updateman')){
            _data.updateman = source.updateman;
        }
        // 附加额外数据
        if (source && Object.keys(source).length > 0 && keys) {
            Object.keys(source).forEach((key: string) => {
                if (!keys.includes(key) && !excludes.includes(key)) {
                    _data[key] = source[key];
                }
            })
        }
        return _data;
    }

    /**
     * 转化数组(数据对象转化成DTO数组)
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam[]} data 数据对象
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async toDtoArray(context: IContext, data: IParam[]) {
        const _data: any[] = [];
        if (data && Array.isArray(data) && data.length > 0) {
            for (let i = 0; i < data.length; i++) {
                const tempdata = await this.toDto(context, data[i]);
                _data.push(tempdata);
            }
        }
        return _data;
    }

    /**
     * 处理响应DTO对象
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} data 数据对象
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async set(context: IContext, data: IParam) {
        const _data: IParam = await this.toDataObj(context, data);
        return _data;
    }

    /**
     * 处理请求数据对象
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} data 数据对象
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async get(context: IContext, data: IParam = {}) {
        return await this.toDto(context, data);
    }

    /**
     * 获取缓存数据
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {string} srfkey 数据主键
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async getCacheData(context: IContext, srfkey: string) {
        return {};
    }

    /**
     * 获取缓存数组
     *
     * @static
     * @param {IContext} context 应用上下文
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async getCacheDataArray(context: IContext) {
        return [];
    }

    /**
     * 设置缓存数据
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} data 数据
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async setCacheData(context: IContext, data: IParam) {
    }

    /**
     * 设置缓存数组
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {any[]} data 数据
     * @return {*} 
     * @memberof IBIZOrderDetailDTOHelp
     */
    public static async setCacheDataArray(context: IContext, data: any[]) {
    }
}
